# IDEE - Integrated development environment in emacs

1. Implement an IDE configuration for at least one of the follow
languages (and framework), as a separate init, major-mode or
minor-mode for emacs.
2. Make compatible with evil-mode for users more familiar with vim.
3. Program this in emacs lisp.
4. Installation of the base IDEE without knowing anything about emacs beyond
reading the welcome screen.
5. Give users a way to group together their own IDE settings for undefined
languages or frameworks.

## Stakeholders

1. Full stack developers
2. Remote login developers
3. Telecommute developers

## Why?

1. Too many IDEs to install. Time, space, uniformity across systems.
2. Developers, especially full stack, use various languages and connect to
multiple system in a single project.
3. Most developers already know emacs or vim.

## Stories

1. Developers would like to easily install their IDE on any posix-friendly system.
2. Users want to use familiar keybindings, whether emacs, vim, etc.
3. Users would like to only need to install a single IDE, rather than one per language.
4. Some developers would like to not need to install a JVM when not developing for a JVM.

## Target Languages (and frameworks)

Select some of the most popular languages:  

* python (django)
* java
* groovy (grails)
* csharp (.NET)
* sql
* javascript (jquery or angular)
* c/cpp
* PHP

## Keybindings

Include emacs and vim defaults for typical text editing:  

* Save or discard changes
* Quit the editor
* Toggle to or from evil-mode
* Highlight trailing whitespace
* Highlight chars after column 80
* Region line comments
* Region block comments
* Region or line indentation

## IDE features

Emacs already has some of these, but it lacks straightfoward configuration,
specifically per language and framework.  

* Easy to install and uninstall without knowing emacs, as a vim user
* Documentation for all dependencies
* [Jump to Definition](https://www.emacswiki.org/emacs/JumpToDefinition)
* Auto-completion
* On-the-fly syntax highlighting
* Find file in project
* Compile with one key press
* Run with one key binding
* Graphical debugger
* Code beautification/formatting
* Keybindings for different window layouts
* Refactorization

## Nice to haves

* [evil-mode](https://www.emacswiki.org/emacs/Evil)
* multiple language support
* extensible language support

## Suggestions

1. Install using a shell script users call that sets up the emacs init file,
adds pertinent documentation to override the emacs welcome screen, and sets
whether to use evil-mode or not.
2. Add keybindings modes for OSX or Windows users.
3. Target the most popular language(s) first.
4. Reuse where others have started. See [emacswiki](https://emacswiki.org/).
5. If not lisp, could also write in another scripting language that generates
the .el files.
6. Option or default run in the terminal outside emacs; the ansi-term has some
limitations.
7. As a dependency or an homage, examine the emacs-ide project for keybindings
and window layout.
8. If reusing the servers design from other implementation, keep a simple
codebase. For example, only use a JVM if the target language is java.
Or don't mix virtual machines with interpreters.

## References

1. [growth of python use](https://stackoverflow.blog/2017/09/06/incredible-growth-python/)
1. [popular programming languages](https://insights.stackoverflow.com/survey/2017#technology-programming-languages)
1. [python-3](https://atilanevesoncode.wordpress.com/2015/01/29/emacs-as-a-python-3-ide-at-last/)
1. [c-language](https://atilanevesoncode.wordpress.com/2016/01/18/emacs-as-a-c-ide-headers/)
1. [emacs-ide etc](https://web.archive.org/web/20170911054250/https://drek.is/archive/20170611/emacs-ide/).  
1. [emacs-ide](https://emacs-ide.tuxfamily.org/)
